package org.lc.cmd.impl;

import lombok.Data;
import org.lc.cmd.plugin.anno.CmdField;

import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.util.List;

/**
 * 模型类
 */
@Data
public class ModelWarp {
    String name;

    /**
     * 是否是简单模型（基本类型、字符串、时间、枚举、文件 或它们的集合）
     * 简单模型可直接实例化，无需子模型
     */
    boolean single = true;

    Class<?> type;

    Type genericType;

    /**
     * 是否是集合
     */
    boolean collection = false;

    /**
     * 是否多值，与[collection]的区别是：multiple在表示集合内复杂元素的字段时，为true
     */
    boolean multiple = false;

    /**
     * 集合元素类型
     */
    Class<?> itemType;

    Field field;

    /**
     * 子模型，当前模型的所有字段
     * 如果当前模型是集合类型，且集合元素非简单模型，则子模型为集合元素类型的所有字段
     */
    List<ModelWarp> subModel;

    CmdField cmdField;
}
